#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define BUF_SIZE 4096
#define READ_FILE "./src_file"
#define WRITE_FILE "./test_file"

static char buf[BUF_SIZE];

int main()
{
    int rfd,wfd;
    size_t size;/*size_t一般用来表示一种计数，比如有多少东西被拷贝等。sizeof操作符的结果类型是size_t，数组大小也是size_t类型。
                    它在头文件中typedef为unsigned   int类型，即typedef   unsigned  int   size_t  
                    该类型保证能容纳实现所建立的最大对象的字节大小。strncat,strncmp,strncpy等都用到了它。
                    size_t 是为了方便系统之间的移植而定义的，在32位系统上定义为  unsigned  int，在64位系统上定义为  unsigned   long。*/
    /*  打开源文件  */
    rfd = open(READ_FILE,O_RDONLY);
    if(0>rfd){
        perror("open error");
        exit(-1);
    }

    /*  打开目标文件    */
    rfd = open(WRITE_FILE,O_WRONLY|O_CREAT|O_TRUNC,0664);
    if(0>wfd){
        perror("open error");
        exit(-1);
    }

    /*  拷贝数据    */
    while (0<(size = read(rfd,buf,BUF_SIZE)))  
    {
        write(wfd,buf,size);
    }

    /*  对目标文件执行fsync同步 */
    fsync(wfd);

    /*  关闭文件退出程序  */
    close(rfd);
    close(wfd);
    exit(0);    


}